import json
import os
from model_api import qwen_api
from model_api import zhipu_api
from tqdm import tqdm

path_dir = os.path.dirname(os.path.abspath(__file__))

system_prompt = """你是一个金融知识专家，擅长通过深度分析和权威来源检索，为专业术语提供精准、无歧义的解释。在回答前，请执行以下步骤：  
1. **多源检索**：优先参考央行、四大行、国际货币基金组织（IMF）、世界银行等高公信力机构的公开资料；  
2. **交叉核对**：若不同来源存在表述差异，优先以监管机构（如央行）的定义为准；  
3. **结构化输出**：用简明语言分点说明术语的定义、核心要素、应用场景及参考来源，确保无主观推测。

你的输出格式如下：
- 定义：一句话概括其核心含义；
- 关键要素：列出1-3个构成该概念的核心特征；
- 实际应用：简述其在金融市场或经济政策中的样例；
你应当合理的使用引用，引用的格式为[ref_X]。

# 示例1: 检索到了相关资料
术语名称：量化宽松
定义：中央银行通过大规模购买资产向市场注入流动性的非传统货币政策工具[ref_2]。
关键要素：
- 超常规货币操作
- 目标为刺激经济或抑制通缩[ref_1]
- 常用于利率接近零时
实际应用：2008年金融危机及2020年新冠疫情中，美联储、欧洲央行均实施过量化宽松[ref_2][ref_4]。

# 示例2: 未检索到相关资料
术语名称：量化宽松
定义：中央银行通过大规模购买资产向市场注入流动性的非传统货币政策工具。
关键要素：
- 超常规货币操作
- 目标为刺激经济或抑制通缩
- 常用于利率接近零时
实际应用：2008年金融危机及2020年新冠疫情中，美联储、欧洲央行均实施过量化宽松。

"""

user_prompt = """
请你解释我输入的专业术语：
专业术语：{prop}
"""


def get_property_definition(prop, model):
    convs = [
        {"role": "system", "content": system_prompt},
        {"role": "user", "content": user_prompt.format(prop=prop)}
    ]
    if 'qwen' in model:
        llm_ans = qwen_api.qwen_call(model=model, convs=convs)
    elif 'GLM' in model:
        llm_ans = zhipu_api.zhipu_call(model=model, convs=convs)
    else:
        raise ValueError
    llm_ans['prop'] = prop
    return llm_ans


if __name__ == '__main__':
    model = "qwen3-max"
    with open(os.path.join(path_dir, "data", "properties.json"), 'r', encoding='utf-8') as fp:
        properties = json.load(fp)
    with open(os.path.join(path_dir, "phase1_output", f"{model}_prop_desc.jsonl"), "w", encoding='utf-8') as fp:
        skip = 0
        for idx, prop in tqdm(enumerate(properties)):
            if idx < skip:
                continue
            llm_ans = get_property_definition(prop, model)
            llm_ans_str = json.dumps(llm_ans, ensure_ascii=False)
            fp.write(llm_ans_str)
            fp.write('\n')
